﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.Data.OleDb;

namespace ArmyBuilder_Modele
{
/*
    public class Modele
    {
    #region Attribut
    #endregion
    #region Propriété
    #endregion
    #region Fonction Base
        void Initialise(string strNom);
        void CopyTo(Modele oDest);
        Modele Clone();
        string ToString();
    #endregion
    #region Fonction Base
    #endregion
    }
*/


    public interface IObjectModele<I>
    {
    #region Attribut
        string strNom{get;set;}
        string Code{get;}
    #endregion
    #region Fonction Base
        void Initialise( string strNom );
        void CopyTo( I oDest ); 
        I Clone();
        string ToString();
    #endregion
    #region Fonction Data
    #endregion
    }

    /// <summary>
    /// Classe modèle d'une armée
    /// </summary>
    public interface IArmeeModele : IObjectModele<IArmeeModele>
    {
    #region Attribut
        IRaceModele oRace { get; set; }           
    #endregion
    #region Fonction Base    
        void Initialise(string strNom, IRaceModele oRace);
    #endregion
    }  

    /// <summary>
    /// Classe modèle d'une race d'armée
    /// </summary>
    public interface IRaceModele : IObjectModele<IRaceModele>
    {
        #region Attribut            
        #endregion
        #region Fonction Base        
        #endregion
    }

    /// <summary>
    /// Classe modèle d'une unité
    /// </summary>
    public interface IUniteModele : IObjectModele<IUniteModele>
    {
        #region Attribut
        string strRace { get; set; }
        string strCategorie { get; set; }
        int nNbPoint { get; set; }
        int nTaille { get; set; }
        bool bMinMaxTaille { get; set; }

        List<IFigurineModele> listFigurine { get; }
        #endregion
        #region Fonction Base
        void Initialise(string strNom, string strRace, string strCategorie, int nNbPoint, int nTaille, bool bMinMaxTaille, List<IFigurineModele> listFigurine);
        #endregion
    }    

    /// <summary>
    /// Classe modèle d'une catégorie d'unité
    /// </summary>
    public interface ICategorieModele : IObjectModele<ICategorieModele>
    {
    #region Attribut
    #endregion
    #region Fonction Base        
    #endregion
    }

    /// <summary>
    /// Classe modèle d'une figurine
    /// </summary>
    public interface IFigurineModele : IObjectModele<IFigurineModele>
    {
    #region Attribut
        int      nM     {get;set;}
        int      nCC    {get;set;}
        int      nCT    {get;set;}
        int      nF     {get;set;}
        int      nE     {get;set;}
        int      nPV    {get;set;}
        int      nI     {get;set;}
        int      nA     {get;set;}
        int      nCD    {get;set;}
        ITypeFigurineModele oType{get;set;}
    #endregion
    #region Fonction Base        
    #endregion
    }
    
    /// <summary>
    /// Classe modèle d'un type de figurine
    /// </summary>
    public interface ITypeFigurineModele : IObjectModele<ITypeFigurineModele>
    {   
    #region Attribut
    #endregion
    #region Fonction Base        
    #endregion
    }  

    /// <summary>
    /// Classe modèle d'élément d'unité
    /// </summary>
    public interface IEltUniteModele<I> : IObjectModele<I>
    {   
    #region Attribut
        string strDescription   {get;set;}
    #endregion
    #region Fonction Base
        void Initialise(string strNom, string strDescription);
    #endregion
    } 

    /// <summary>
    /// Classe modèle d'équipement d'unité
    /// </summary>
    public interface IEquipementModele : IEltUniteModele<IEquipementModele>
    {       
    }  

    /// <summary>
    /// Classe modèle d'objet magique d'unité
    /// </summary>
    public interface IObjetMagiqueModele : IEltUniteModele<IObjetMagiqueModele>
    {      
    } 
 
    /// <summary>
    /// Classe modèle de monture d'unité
    /// </summary>
    public interface IMontureModele : IEltUniteModele<IMontureModele>
    {       
    }

    /// <summary>
    /// Classe modèle de règle spéciale d'unité
    /// </summary>
    public interface IRegleSpecialModele : IEltUniteModele<IRegleSpecialModele>
    {       
    } 

    /// <summary>
    /// Classe modèle d'option d'unité
    /// </summary>
    public interface IOptionUniteModele : IEltUniteModele<IOptionUniteModele>
    {       
    } 
}


